// 会员登录和积分接口数据类型

// 检测用户名是否可用返回接口
export interface ICheckUserNameResult {
    //返回状态码，0表示用户已存在，1表示用户不存在
    code: number;
    //返回信息
    msg: string;
    //返回时间
    time: string;
    //返回数据
    data: any;
}

// 会员登录返回的用户数据
export interface ILoginUserinfo {
    // 用户Id
    id: number;
    // 用户名
    username: string;
    // 昵称
    nickname: string;
    // 手机号
    mobile: string;
    //头像URL
    avatar: string;
    // 积分
    vip: Number;
    // 余额
    score: Number;
    // 到期时间
    vip_end_time: string;
    // 到期时间
    vip_end_time_text: string;
    // Token值
    token: string;
    // 用户id
    user_id: number;
    // 创建时间
    createtime: number;
    // 过期时间
    expiretime: number;
    // 刷新时间
    expires_in: number;
}

// 会员登录返回数据
export interface ILoginData {
    // 用户信息
    userinfo: ILoginUserinfo;
    // 成员名称
    memberName: String;
    //过期日期
    memberExpiredate: string;
    // 积分
    vipPoint: number;
    // 充值积分
    rcPoint: number;
}
// 会员登录返回接口
export interface ILoginRoot {
    //返回状态码，1表示成功，其它表示失败
    code: number;
    //返回信息
    msg: string;
    //返回时间
    time: string;
    //返回数据
    data: ILoginData;
}

// 会员登录返回数据类
export class LoginRoot implements ILoginRoot {
    //返回状态码，1表示成功，其它表示失败
    code: number;
    //返回信息
    msg: string;
    //返回时间
    time: string;
    //返回数据
    data: ILoginData;    
    // 构造函数
    constructor(code: number, msg: string, time: string, data: ILoginData) {
        this.code = code;
        this.msg = msg;
        this.time = time;
        this.data = data;
    }
}


// 获取积分明细数据接口
export interface IHuoQuJiFenData {
    //终身会员
    memberName: string;
    // 过期时间
    memberExpiredate: string;
    // 积分
    task_num: number;
    // 充值积分
    vip_point: number;
    // 充值积分
    rc_point: number;
    rc_balance:number;
}

// 获取积分接口
export interface IHuoQuJiFenModel {
    // 返回状态码，1表示成功，其它表示失败
    code: number;
    // 返回信息
    msg: string;
    // 返回时间
    time: string;
    // 返回数据
    data: IHuoQuJiFenData;
}

// 配音广场各类数据接口
// 搜索框接口
export interface IRestaurantItem {
    value: string
    link: string
}

// 搜索框类
export class RestaurantItem implements IRestaurantItem {
    value: string
    link: string    
    constructor(value: string, link: string) {
        this.value = value
        this.link = link
    }
}

//语音Tag分类接口
export interface IVoiceTag {
    id: number;
    name: string;
    en_name: string;
    createtime: number;
    updatetime: number;
  }

  //语音分类接口
export interface IVoiceCat {
    id: number;
    name: string;
    en_name: string;
    createtime: number;
    updatetime: number;
  }

  //语音情绪接口
export interface IVoiceStyle {
    id: number;
    name: string;
    en_name: string;
    image: string;
    description: string;
    demotext: string;
    createtime: number;
    updatetime: number;
  }

//语音角色接口
export interface IVoiceRole {
    id: number;
    name: string;
    en_name: string;
    createtime: number;
    updatetime: number;
  }

// 角色接口(自已调制版)
export interface IVoiceActor {
    id: number;       // 编号id
    ShortName: string;  // 角色简称
    Avatarimage: string;  //头像
    DisplayName: string;  //显示名称
    Gender: string;       //性别:male男 female女
    api_role_id: string;   //当前选中的角色id
    api_role_ids: string; //角色id列表
  
    styleDegree: number;  // 音量
    WordsPerMinute: number; //每分钟字数
    api_cat_ids: string;  //分类id列表
    api_tag_ids: string;  //标签id列表
    api_style_id: string; //当前选中的情绪id
    api_style_ids: string; //情绪id列表
    createtime?: any;
    updatetime?: any;
  
    volume:string;  //音量
    paceValue:number; //语速
    pitchValue:number;//音调

    //控制项属性
    isShown: boolean; // 是否显示
    rowId: number;  // 行号,第几行
  
    //附加属性
    isCollection: boolean;  //是否收藏,true是，false否
    VoiceStyle: IVoiceStyle; //当前情绪
  
    VoiceStyleValue: VoiceStyle[] ; //语音情绪列表
    api_cat_id_names: string[] ; //分类名称数组
    api_style_id_names: string[] ; //情绪名称数组
  
  }  

  //语音情绪接口
export interface ISpeakingStyle {
    id: number;  //编号   对应：id
    name: string;  //名称 对应：name
    en_name: string; //英文名称  对应：en_name
    value: string;  //值  对应：en_name
    Desc: string;  //描述 对应：name 
  }

  // 定义文本转语间参数接口类型
export interface ISpeech {
    text: string; //语音的文本
    voiceName: string;  //发音人
    rate: string; //语速
    volume: string; //音量
    pitch: string;  //音调
    style: string;  //讲话风格，可以表达快乐、同情和平静等情绪。 也可以针对不同场景（例如客户服务、新闻广播和语音助理）优化语音。
    role: string; //讲话角色扮演，声音可以模仿不同的年龄和性别，但声音名称不会更改，男性语音可以提高音调和改变
    styleDegree: string;  //讲话风格的强度，可以指定更强或更柔和的风格，使语音更具表现力或更柔和， 可接受值的范围为：0.01 到 2（含），默认值为 1，表示预定义的风格强度，最小单位为 0.01，表示略倾向于目标风格，值为 2 表示是默认风格强度的两倍。
    breakTime: string;  //停顿时间
  }

//当前的语速和语调和音量参数接口
export interface IVoiceRoleArgs {
    pace: number;            //语速
    pitch: number;           //音高(语调)
    volume: number;          //音量
    paceTitle: string;        ///语速标题
  
    paceValue: number;            //语速真实值
    pitchValue: number;           //音高(语调)真实值
    volumeValue: number;          //音量真实值
}

//当前的语速和语调和音量参数类
export class VoiceRoleArgs implements IVoiceRoleArgs {
    pace: number;            //语速
    pitch: number;           //音高(语调)
    volume: number;          //音量
    paceTitle: string;        ///语速标题
  
    paceValue: number;            //语速真实值
    pitchValue: number;           //音高(语调)真实值
    volumeValue: number;          //音量真实值    
    constructor(pace: number, paceValue:number, pitch: number, pitchValue:number,volume: number, paceTitle: string) {
        this.pace = pace;
        this.paceValue = paceValue;
        this.pitch = pitch;
        this.pitchValue = pitchValue;
        this.volume = volume;
        this.volumeValue = volume;
        this.paceTitle = paceTitle;
      }
  } 

//语音角色接口
export class VoiceRole implements IVoiceRole {
  id: number;
  name: string;
  en_name: string;
  createtime: number;
  updatetime: number;
}

  // 配音角色类
export class VoiceActor implements IVoiceActor {
    id: number;       // 编号id
    ShortName: string;  // 角色简称(英文名称)
    Avatarimage: string;  //头像
    DisplayName: string;  //显示名称(中文名称)
    Gender: string;       //性别:male男 female女
    api_role_id: string;   //当前选中的角色id
    api_role_ids: string; //角色id列表
  
    styleDegree: number;  // 音量
    WordsPerMinute: number; //每分钟字数
    api_cat_ids: string;  //分类id列表
    api_tag_ids: string;  //标签id列表
    api_style_id: string; //当前选中的情绪id
    api_style_ids: string; //情绪id列表
    createtime?: any;
    updatetime?: any;

    volume:string;  //音量
    paceValue:number; //语速
    pitchValue:number;//音调
  
    //控制项属性
    isShown: boolean; // 是否显示
    rowId: number;  // 行号,第几行
  
    //附加属性
    isCollection: boolean;  //是否收藏,true是，false否
    VoiceStyle: IVoiceStyle; //当前情绪
  
    VoiceStyleValue: VoiceStyle[] ; //语音情绪列表
    api_cat_id_names: string[] ; //分类名称数组
    api_style_id_names: string[] ; //情绪名称数组

    /**
     * 构造函数
     * 用于初始化对象的属性
     * @param {number} id - 唯一标识符
     * @param {string} shortName - 简称
     * @param {string} displayName - 显示名称
     * @param {string} avatarimage - 头像图片地址
     */
    constructor(id: number, shortName: string, displayName: string, avatarimage: string) {
      // 初始化isShown为false，表示对话框默认不显示
      this.isShown = false;
      // 初始化rowId为0，用于标识表格行ID
      this.rowId = 0;
  
      // 初始化id属性为传入的id参数值
      this.id = id;
      // 初始化shortName属性为传入的shortName参数值
      this.ShortName = shortName;
      // 初始化displayName属性为传入的displayName参数值
      this.DisplayName = displayName;
      // 初始化avatarimage属性为传入的avatarimage参数值
      this.Avatarimage = avatarimage;
      // 初始化isCollection为false，表示默认不是集合
      this.isCollection = false;
      this.VoiceStyle = new VoiceStyle();
  
      this.VoiceStyleValue=[] ; //语音情绪列表
      this.api_cat_id_names=[] ; //分类名称数组
      this.api_style_id_names=[]; //情绪名称数组

      this.volume="+10.00%";  //音量
      this.paceValue=0.95; //语速
      this.pitchValue=0;//音调
  
      // 测试数据
      // 设置头像图片地址为测试数据
      this.Avatarimage = 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg';
    }
  
  }

//情绪类
export class VoiceStyle implements IVoiceStyle {
    id: number;
    name: string;
    en_name: string;
    image: string;
    description: string;
    demotext: string;
    createtime: number;
    updatetime: number;
}  

//文本转语间参数
export class Speech implements ISpeech {
    text: string; //语音的文本
    voiceName: string;  //发音人(英文名称)
    rate: string; //语速
    volume: string; //音量
    pitch: string;  //音调
    style: string;  //讲话风格，可以表达快乐、同情和平静等情绪。 也可以针对不同场景（例如客户服务、新闻广播和语音助理）优化语音。
    role: string; //讲话角色扮演，声音可以模仿不同的年龄和性别，但声音名称不会更改，男性语音可以提高音调和改变
    styleDegree: string;  //讲话风格的强度，可以指定更强或更柔和的风格，使语音更具表现力或更柔和， 可接受值的范围为：0.01 到 2（含），默认值为 1，表示预定义的风格强度，最小单位为 0.01，表示略倾向于目标风格，值为 2 表示是默认风格强度的两倍。
    breakTime: string;  //停顿时间
}

//配音制作记录数据接口，配音制作中生成配音记录的数据结构,会保存到服务器数据库中
export interface IAudioRecord {
  id: number; // 唯一标识符
  userName: string | null; // 用户名
  title:string; //作品标题  
  text: string; // 文本内容
  voiceShortName:string;  // 发音人简称(英文名称)
  voiceDisplayName: string; // 发音人(中文名称)
  Avatarimage:string;   //发音人头像地址  
  api_role_id:string; //选中的角色id
  api_style_id:string;  //选中的情绪id
  rate: string; //语速
  volume: string; //音量
  pitch: string;  //音调
  styleDegree: string;  //讲话风格的强度，可以指定更强或更柔和的风格，使语音更具表现力或更柔和， 可接受值的范围为：0.01 到 2（含），默认值为 1，表示预定义的风格强度，最小单位为 0.01，表示略倾向于目标风格，值为 2 表示是默认风格强度的两倍。
  breakTime: string;  //停顿时间
  createtime:string;  //创建时间
  updatetime:string;  //更新时间
  audioUrl:string;    //音频地址
  captionUrl:string;  //字幕地址
  memberId:number;    //会员id
  selected:boolean;   //是否选中，是控制项，数据库不存储
}

//配音制作记录数据类，配音制作中生成配音记录的数据结构,会保存到服务器数据库中
export class AudioRecord implements IAudioRecord {
  id: number; // 唯一标识符
  userName: string | null; // 用户名
  title:string; //作品标题
  text: string; // 文本内容
  voiceShortName:string;  // 发音人简称(英文名称)
  voiceDisplayName: string; // 发音人(中文名称)
  Avatarimage:string;   //发音人头像地址
  api_role_id:string; //选中的角色id
  api_style_id:string;  //选中的情绪id
  rate: string; //语速
  volume: string; //音量
  pitch: string;  //音调
  styleDegree: string;  //讲话风格的强度，可以指定更强或更柔和的风格，使语音更具表现力或更柔和， 可接受值的范围为：0.01 到 2（含），默认值为 1，表示预定义的风格强度，最小单位为 0.01，表示略倾向于目标风格，值为 2 表示是默认风格强度的两倍。
  breakTime: string;  //停顿时间
  createtime:string;  //创建时间
  updatetime:string;  //更新时间
  audioUrl:string;    //音频地址
  captionUrl:string;  //字幕地址
  memberId:number;    //会员id
  selected:boolean;   //是否选中，是控制项，数据库不存储
 }

/**
 * ISong 接口定义了歌曲的属性和结构
 * 
 * @property {number} id - 唯一标识符，用于唯一地识别每首歌曲
 * @property {string} icon - 音乐图标的路径或URL，用于显示歌曲的封面或图标
 * @property {string} title - 歌名，歌曲的标题或名称
 * @property {string} audioSrc - 音乐地址，歌曲音频文件的路径或URL，用于播放歌曲
 */
export interface ISong {
  id: number; // 唯一标识符
  icon: string; // 音乐图标
  title: string; // 歌名
  audioSrc: string; // 音乐地址
}

// 歌曲类
export class Song implements ISong {
  id: number;
  icon: string;
  title: string;
  audioSrc: string;

  constructor(id: number, icon: string, title: string, audioSrc: string) {
    this.id = id;
    this.icon = icon;
    this.title = title;
    this.audioSrc = audioSrc;
  }
}

// 订单支付接口
export interface IDingDanModel{
  amount:number;  //金额
  type:string;  //支付类型,alipay支付宝
  title:string; //提交标题
  username:string;  //用户名
  vipid:string;   //购买的vip的等级
  days:string;  //购买天数
}

// 订单支付实体类
export class DingDanModel implements IDingDanModel{
  amount:number;  //金额
  type:string;  //支付类型,alipay支付宝
  title:string; //提交标题
  username:string;  //用户名
  vipid:string;   //购买的vip的等级
  days:string;  //购买天数
}



// 返回接口的基地址
export function GetBaseURL(): string {
  // 接口地址
  const baseUrl: string = "https://api.turuio.net";
  //测试地址
  //const baseUrl: string = "https://api.bishi.turuio.net";
  
  return baseUrl;
}

